import { _decorator, CCBoolean, Component, Enum, EventHandler, EventMouse, Node, UITransform, Vec3 } from 'cc';
import { DEV } from 'cc/env';
import { DIR } from '../../../cfw/Define';
const { ccclass, property, requireComponent } = _decorator;
const _tempVec3 = new Vec3();
@ccclass('SuperCursor')
export class SuperCursor extends Component {

    @property({ tooltip: DEV && "是否显示光标" })
    @property
    cursorVisible: boolean = true;

    @property({ tooltip: DEV && "当鼠标悬停时是否自动选中" })
    @property
    autoCheckOnHover: boolean = false;

    @property({ tooltip: DEV && "光标方位" })
    @property({ type: Enum(DIR) })
    cursorDir: DIR = DIR.LEFT;

    @property({ tooltip: DEV && "x偏移" })
    @property
    offsetX: number = 0;

    @property({ tooltip: DEV && "y偏移" })
    @property
    offsetY: number = 0;

    @property({ tooltip: DEV && "按钮的悬停事件列表" })
    @property([EventHandler])
    hoverEvents: EventHandler[] = [];


    // observer: ISuperCursor

    // // sHoverCallback: CursorItemFunc = null;//处于列表中的悬停回调

    // private _isMouseDown: boolean = false;
    // private _isMouseDownLast: boolean = false;
    // private _isHover: boolean = false;

    // public get isHover() {
    //     return this._isHover;
    // }

    //兼容旧方式回调
    // private _hoverCallback: CursorItemFunc = null;//悬停回调

    // /**
    //  * @deprecated 已弃用的悬停回调方式，使用脚本挂载handler方式
    //  */
    // public set hoverCallback(callback: CursorItemFunc) {
    //     this._hoverCallback = callback;
    // }

    // /**
    //  * @deprecated 已弃用的悬停回调方式，使用脚本挂载handler方式
    //  */
    // public get hoverCallback() {
    //     return this._hoverCallback;
    // }
    // protected _check: SuperCheck;
    // get check(): SuperCheck {
    //     if (!this._check) {
    //         this._check = this.node.getComponent(SuperCheck)
    //     }
    //     return this._check;
    // }
    onLoad(): void {

    }
    // start() {
    //     this.node.on(Node.EventType.MOUSE_ENTER, (event: EventMouse) => {
    //         // console.log("MOUSE_ENTER -", this.node.name);
    //         if (this.autoCheckOnHover) {
    //             // this.check.onSelected();
    //         } else {
    //             this.onFocusEvent();
    //         }
    //         this._isMouseDown = this._isMouseDownLast;
    //     }, this);

    //     this.node.on(Node.EventType.MOUSE_MOVE, (event: EventMouse) => {
    //         // console.log("MOUSE_ENTER -", this.node.name);
    //         //TODO 123光标移动检测悬停
    //         // this.onFocusEvent();
    //     }, this);

    //     this.node.on(Node.EventType.MOUSE_LEAVE, (event: EventMouse) => {
    //         // if (!this.interactable) {
    //         //     return;
    //         // }
    //         if (this.autoCheckOnHover) {
    //             // this.check.onUnSelected();
    //         } else {
    //             this.onBlurEvent();
    //         }
    //         this._isMouseDownLast = this._isMouseDown;
    //     }, this);
    // }
    public getCursorPosition(): Vec3 {
        let transform = this.node.getComponent(UITransform);
        switch (this.cursorDir) {
            case DIR.UP:
                _tempVec3.set(transform.contentSize.width * (0.5 - transform.anchorX) + this.offsetX, transform.contentSize.height * transform.anchorY + this.offsetY, 0);
                break;
            case DIR.DOWN:
                _tempVec3.set(transform.contentSize.width * (0.5 - transform.anchorX) + this.offsetX, -transform.contentSize.height * transform.anchorY + this.offsetY, 0);
                break;
            case DIR.LEFT:
                _tempVec3.set(-transform.contentSize.width * transform.anchorX + this.offsetX, transform.contentSize.height * (0.5 - transform.anchorY) + this.offsetY, 0);
                break;
            case DIR.RIGHT:
                _tempVec3.set(transform.contentSize.width * transform.anchorX + this.offsetX, transform.contentSize.height * (0.5 - transform.anchorY) + this.offsetY, 0);
                break;
        }
        return _tempVec3;
    }
    // public onFocusEvent() {
    //     // MultiController.getInstance().blockInput = false;
    //     CursorController.instance().onFocusEvent(this);
    //     this.onHover();
    // }

    // public onBlurEvent() {
    //     // MultiController.getInstance().blockInput = false;
    //     CursorController.instance().onBlurEvent(this);
    //     this.onUnHover();
    // }

    // public onHover() {
    //     if (this.observer) {
    //         this.observer.onItemHoverCallback(this, true);
    //     } else {
    //         this.setHoverState(true);
    //     }
    // }

    // public onUnHover() {
    //     if (this.observer) {
    //         this.observer.onItemHoverCallback(this, false);
    //     } else {
    //         this.setHoverState(false);
    //     }
    // }

    // onEnable() {
    //     CursorController.instance().onBlurEvent(this);
    // }

    // onDisable() {
    //     CursorController.instance().onBlurEvent(this);
    // }
    // public getCursorWorldPosition(): Vec3 {
    //     this.getCursorPosition();
    //     return Vec3.add(_tempVec3, this.node.worldPosition, _tempVec3);
    // }

    // isFocused() {
    //     let cursorView = CursorController.instance().cursorView;
    //     return cursorView && cursorView.node && cursorView.node.parent == this.node;
    // }

    // setHoverState(hover: boolean) {
    //     this._isHover = hover;
    //     // if (this._hoverCallback) {
    //     //     this._hoverCallback(this.node, hover);
    //     // }
    //     EventHandler.emitEvents(this.hoverEvents, this);
    // }
    update(deltaTime: number) {

    }
}
// export type CursorItemFunc = (node: SuperCursor, select: boolean) => void;

